package com.site.base.web;

 

import javax.servlet.http.HttpServletResponse;
import java.util.Map;
import java.util.Locale;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.OutputStream;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.support.ResourceBundleMessageSource;

import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
 * <pre>
 *    所有Spring MVC控制器的基类
 * </pre>
 */
public abstract class BaseController {

//    @Autowired
//    private ResourceBundleMessageSource messageSource;
//
//    /*日志记录器*/
//    /*日志记录器*/
//    protected Logger logger = LoggerFactory.getLogger(this.getClass());
//
//    /**
//     * freemarker模板配置
//     */
//    @Autowired
//    private FreeMarkerConfigurer freeMarkerConfigurer;
//
//    /**
//     * 让浏览器不缓存本页面
//     *
//     * @param response
//     * add by chenxh 100319
//     */
//    protected void noCache(HttpServletResponse response) {
//        response.setHeader("Cache-Control", "no-cache");
//        response.setDateHeader("Expires", 0);
//        response.setHeader("Pragma", "no-cache");
//    }
//
//    /**
//     * 根据FreeMarker模板格式化数据模型
//     *
//     * @param ftlBaseName 基于classpath:ftl/下的模板基名，如你的模板位于
//     * ftl/mail/aaa.ftl,则对应的ftpBaseName为mail/aaa
//     * @param map
//     * @return
//     */
//    public String formatContent(String ftlBaseName, Map map) {
//        ftlBaseName += ".ftl";
//        try {
//            freeMarkerConfigurer.getConfiguration().setSharedVariable("resourceServerUrl", SysConfig.RESOURCE_SERVER_URL);
//            freeMarkerConfigurer.getConfiguration().setSharedVariable("contextPath", "");
//            freeMarkerConfigurer.getConfiguration().setSharedVariable("webSiteName", SysConfig.WEBSITE_NAME);
//            Template tpl = freeMarkerConfigurer.getConfiguration().getTemplate(ftlBaseName);
//            String content = FreeMarkerTemplateUtils.processTemplateIntoString(tpl, map);
//            return content;
//        } catch (IOException e) {
//            logger.error("在加载" + ftlBaseName + "模板时，发生IO异常..");
//            throw new RuntimeException(e);
//        } catch (TemplateException e) {
//            logger.error("在解析" + ftlBaseName + "模板时，发生解析异常..");
//            throw new RuntimeException(e);
//        }
//    }
//
//    /**
//     * 获取传入参数的资源消息
//     *
//     * @param key 消息键名（即conf/messages.properties中的键名）
//     * @param args 用于填充格式化串中的参数
//     */
//    protected String getBundleMessage(String key, Object[] args) {
//        if (messageSource == null) {
//            messageSource = (ResourceBundleMessageSource) EasyApplicationContextUtils.getBeanByName("messageSource");
//            throw new RuntimeException("MessageSourceAccessor should be injected before you use it!");
//        }
//        return this.messageSource.getMessage(key, args, Locale.getDefault());
//    }
//
//    /**
//     * 获取资源消息
//     *
//     * @param key 消息键名（即conf/messages.properties中的键名）
//     */
//    protected String getBundleMessage(String key) {
//        return this.getBundleMessage(key, null);
//    }
//
//    /**
//     * 向客户端输出操作成功的json格式的报文
//     *
//     * @param response
//     * @param customMessage
//     * @throws java.io.IOException
//     */
//    @SuppressWarnings("unchecked")
//    protected void outputSuccessJsonResponse(HttpServletResponse response, Map customMessage) {
//        String message = this.getBundleMessage("common.success");
//        String responseContent = AjaxJsonResponse.generateSuccessfulOperationDoc(customMessage, message);
//        this.flushResponse(response, responseContent);
//    }
//
//    /**
//     * 向客户端输出用户自定义成功消息
//     *
//     * @param response
//     * @param customMessage
//     * @throws IOException
//     */
//    @SuppressWarnings("unchecked")
//    protected void outputSuccessJsonResponseMessage(HttpServletResponse response,
//                                                    String customMessage) {
//        String responseContent = AjaxJsonResponse.generateSuccessfulOperationDoc(null,
//                customMessage);
//        this.flushResponse(response, responseContent);
//    }
//
//    /**
//     * 向客户端输出操作成功的json格式的报文
//     *
//     * @param response
//     * @param customContent
//     * @param customMsg
//     * @throws IOException
//     */
//    @SuppressWarnings("unchecked")
//    protected void outputSuccessJsonResponse(HttpServletResponse response, Map customContent, String customMsg) {
//        String responseContent = AjaxJsonResponse.generateSuccessfulOperationDoc(customContent, customMsg);
//        this.flushResponse(response, responseContent);
//    }
//
//
//    /**
//     * Method to flush a String as response.
//     *
//     * @param response
//     * @param responseContent
//     * @throws IOException
//     */
//    protected void flushResponse(HttpServletResponse response, String responseContent) {
//        try {
//            response.setCharacterEncoding("GBK");
//            /*针对ajax中页面编码为GBK的情况，一定要加上以下两句*/
//            response.setHeader("Cache-Control", "no-cache");
//            response.setContentType("text/html;charset=gbk");
//            PrintWriter writer = response.getWriter();
//            if (StringUtils.isEmpty(responseContent)) {
//                writer.write("");
//            } else {
//                writer.write(responseContent);
//            }
//            writer.flush();
//            writer.close();
//        }
//        catch (IOException e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    /**
//     * Method to flush a hole page as response.
//     *
//     * @param response
//     * @param responseContent
//     * @throws IOException
//     */
//    protected void flushPage(HttpServletResponse response, String responseContent) {
//        try {
//            response.resetBuffer();
//            response.setContentType("text/html;charset=gbk");
//            response.setCharacterEncoding("GBK");
//            PrintWriter writer = response.getWriter();
//            writer.write(responseContent);
//            writer.flush();
//            writer.close();
//        }
//        catch (IOException e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    /**
//     * 输出XML文档
//     *
//     * @param response
//     * @param xml
//     * @throws Exception
//     */
//    public void outputXML(HttpServletResponse response, String xml) {
//        try {
//            response.setContentType("text/xml; charset=GBK");
//            PrintWriter out = response.getWriter();
//            out.write(xml);
//            out.flush();
//            out.close();
//        }
//        catch (IOException e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    /**
//     * 输出XML文档
//     *
//     * @param response
//     * @param xml 文档内容
//     * @param encoding 字符串的编码方式
//     */
//    public void outputXML(HttpServletResponse response, String xml, String encoding) {
//        try {
//            response.setContentType("text/xml; charset=GBK");
//            OutputStream out = response.getOutputStream();
//            out.write(xml.getBytes(encoding));
//            out.flush();
//            out.close();
//        }
//        catch (IOException e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    public FreeMarkerConfigurer getFreeMarkerConfigurer() {
//        return freeMarkerConfigurer;
//    }
//
//    public void setFreeMarkerConfigurer(FreeMarkerConfigurer freeMarkerConfigurer) {
//        this.freeMarkerConfigurer = freeMarkerConfigurer;
//    }
//
//    /**
//     * 获得上下文
//     * @return
//     */
//    public UserSessionContext getUserSessionContext() {
//        return UserSessionContextHolder.getUserSessionContext();
//    }
//
//    /**
//     * 获得登录用户的ID      若用户未登录，则返回null
//     * add by wenjg 2009-07-26
//     *
//     * @return modify by 吴剑光  2009-08-06
//     */
//    public String getLogonUserId() {
//        UserSessionContext userSessionContext = getUserSessionContext();
//        if (userSessionContext != null) {
//            return userSessionContext.getUserId();
//        }
//        return null;
//    }
//
//    /**
//     * 获得登录公司的ID     若用户未登录，则返回null
//     * add by wenjg 2009-07-26
//     *
//     * @return modify by 吴剑光  2009-08-06
//     */
//    public String getLogonCompanyId() {
//        UserSessionContext sessionContext = getUserSessionContext();
//        if (sessionContext != null) {
//            return getUserSessionContext().getCompanyId();
//        }
//        return null;
//    }
//
//    /**
//     * 获得登录公司的ID
//     * add by wenjg 2009-08-24
//     * @return
//     */
//    public String getLogonCompanyName() {
//        UserSessionContext sessionContext = getUserSessionContext();
//        if (sessionContext != null) {
//            return getUserSessionContext().getCompanyName();
//        }
//        return null;
//    }
//
//    /**
//     * 把页面内容加入缓存
//     *
//     * @param key
//     * @param content
//     */
//    public void putPageInCache(String key, String content) {
//        GlobalCacheManager.put(key, new CacheFrontPage(content), SysConfig.PAGE_CACHE_ALIVE_TIME);
//    }
//
//    /**
//     * 从缓存中获取页面内容
//     *
//     * @param key
//     * @return
//     */
//    public String getPageFromCache(String key) {
//        if (SysConfig.FRONT_USE_CACHE) {
//            CacheFrontPage pageCache = (CacheFrontPage) GlobalCacheManager.get(key);
//            if(pageCache != null){
//                // 获取有过期条件限制的页面缓存
//                return pageCache.getTimeOutPageContent();
//            }
//        }
//        return null;
//    }
//
//    /**
//     * 校验是否系统用户，如果不是系统用户，直接抛出异常
//     */
//    public void validateAdminUser() {
//        UserSessionContext sc = getUserSessionContext();
//        if (!sc.isSysUser()) {
//            throw new InvalidAccessException("非系统用户不能操作！");
//        }
//    }
}
